Перейти к основному содержимому

Linux

Разработчику Архитектору Инженеру

Linux

Linux – семейство открытых ОС, основанных на ядре Linux (Linux kernel), созданном Линусом Торвальдсом в 1991 году. В отличие от Windows и macOS, Linux не принадлежит одной компании. Это проект с открытым исходным кодом, который развивается сообществом разработчиков по всему миру. Само ядро Linux – лишь часть ОС, а полноценная система включает в себя множество программ из проектов GNU, X Window System, драйверов, утилит и т.д.


Как устроен Linux?

Архитектура Linux включает в себя следующие компоненты:

  • Ядро (Kernel) – управляет взаимодействием с оборудованием;
  • Оболочка (Shell) – интерфейс командной строки;
  • Утилиты GNU – стандартные инструменты работы с системой;
  • Файловая система – структура хранения данных;
  • Менеджер окон / DE (Desktop Environment) – графическая оболочка;
  • Пакетный менеджер – установка и удаление ПО;
  • Службы (system, init) – запуск и управление процессами.

Первое, что заметит пользователь Windows – обилие команд через CLI, а также крайне большое сокращение всего, что можно. Если Windows рассчитана на простых пользователей, в том числе офисных, которым проще пояснить полное название, с подсказками и подробностями, а также на родном языке, в графическом интерфейсе, то в Linux расчёт идёт на простоту и удобство для разработчиков.

А разработчики люди другие – им важно, чтобы пришлось «писать меньше букв», они работают по-другому. Поэтому, в Linux, даже открыв файловую систему, можно увидеть, что все стандартные директории называются кратко вроде «root», «home». Никаких длинных путей, всё просто и быстро. Аналогично и работа с программами – чтобы что-то скачать и установить, порой не придётся идти на сайт дистрибутива и долго мучаться с пользовательским интерфейсом. Разработчики привыкли к коду, поэтому им проще найти гайд, вбить нужную команду в консоль и всё установится автоматически. А в использовании, проще опять же – вбить команду в консоль и выполнять, чем сидеть и настраивать кнопочки, галочки и прочие элементы в интерфейсе.

image-2.png


Компоненты

1. Ядро

Ядро Linux – сердце системы. Отвечает за управление процессором (планировщик задач), управление памятью, работу с дисками и файловыми системами, сетевые подключения, драйверы устройств, безопасность. Выпускается регулярно, каждые 2-3 месяца. Существуют, конечно, и долгосрочные версии (LTS, Long Term Support) – поддерживаются 2-4 года.


2. Дистрибутивы

Linux – семейство ОС, называемых дистрибутивами (distributions). Они различаются по цели использования, простоте, стабильности и другим параметрам.

Классификация дистрибутивов.

По типу пакетного менеджера:

  • Debian / Ubuntu - .deb, apt;
  • Red Hat / CentOS / Fedora - .rpm, dnf / yum;
  • Arch Linux – pacman;
  • SUSE / openSUSE – zipper.

По назначению:

  • для начинающих: Ubuntu, Linux Mint, Elementary OS;
  • для серверов: CentOS, RHEL, Debian;
  • для разработчиков: Arch Linux, Fedora Workstation;
  • Live-CD дистрибутивы: Kali Linux (безопасность), Tails (анонимность), Knoppix.

Говоря о дистрибутивах, их просто великое множество - всё из-за открытости ОС. Есть и общепринятые качественные оболочки, есть и простые, а можно встретить всякое - ОС с жесточайшим контролем, используемые в определённых странах (допустим, Северная Корея), оболочки в стиле аниме, различных звёзд. Есть игровые вроде SteamOS, есть и безумные - к примеру, Suicide Linux удаляет все файлы при любой ошибке в терминале.


3. Среда и ключевое ПО

Среда и ключевое ПО, службы.

Графическая среда (DE):

  • GNOME – современный, официальный для Fedora, Ubuntu;
  • KDE Plasma – мощный, гибкий, красивый;
  • XFCE – легковесный, подходит для старых машин;
  • LXQt / MATE / Cinnamon – альтернативы.

Графическую среду можно установить отдельно, через командную строку.

Службы (services). Linux использует:

  • systemd – современная система инициализации и управления службами;
  • init – старая система (SysVinit).

Зачем это всё нужно? И почему мы снова перешли в перечисления? Что за странные названия и сокращения?

Смысл в том, что Linux, в отличие от Windows, не ограничена правами одной корпорации, а развивается целым сообществом разработчиков. Каждый делает что-то, изобретает инструменты, делится с другими, и совместными усилиями «рождаются» новые службы, оболочки, утилиты. А ядро Linux и система пакетов позволяет просто взять и поставить себе любой из них, собрав из всех компонентов своего «монстра Франкенштейна».


4. Инструменты

Полезные инструменты в Linux

  • top / htop – мониторинг процессов;
  • df / du – информация о дисковом пространстве;
  • ls / cp / mv / rm – работа с файлами;
  • grep / sed / awk – обработка текста;
  • find – поиск файлов;
  • chmod / chown – управление правами доступа;
  • tar / zip / gzip – архивирование;
  • curl / wget – загрузка данных из интернета;
  • ssh / scp / rsync – удалённый доступ и копирование;
  • nmcli / ip / ifconfig – сетевые настройки;
  • apt / dnf / pacman – пакетные менеджеры.

5. Сеть

Работа с сетью.

Управление сетью выполняется через:

  • NetworkManager – графический менеджер подключений;
  • system-networkd – для серверов;
  • nmcli – CLI для NetworkManager.

Примеры работы с сетью:

ip a                                # информация о IP-адресах
ping google.com # проверка связи
traceroute google.com # маршрут до сервера
netstat -tuln # активные порты
ss -tuln # более быстрая замена netstat
nmap -p 1-1000 192.168.1.1 # сканирование портов
dig example.com # DNS-запросы


Файловая система и структура каталогов Linux

Файловая система Linux построена на иерархической модели с единым корневым каталогом /. Все остальные каталоги и устройства монтируются в эту древовидную структуру. Такой подход обеспечивает унифицированное представление ресурсов системы — будь то жёсткий диск, USB-накопитель, сетевой том или виртуальный интерфейс ядра.

Каждый каталог в системе имеет чёткое назначение, определённое стандартом Filesystem Hierarchy Standard (FHS). Это позволяет разработчикам, администраторам и программному обеспечению предсказуемо находить нужные файлы и компоненты независимо от используемого дистрибутива.

Корневой каталог /

Корневой каталог — это вершина всей файловой системы. Он обозначается символом / и содержит все остальные каталоги. В отличие от Windows, где каждый диск имеет собственную букву (C:, D: и т.д.), в Linux все устройства подключаются как подкаталоги корня.

/bin — основные исполняемые файлы

Каталог /bin содержит базовые команды, необходимые для работы системы даже в режиме восстановления. Сюда входят такие утилиты, как ls, cp, mv, rm, cat, bash и другие. Эти программы доступны всем пользователям и критически важны для функционирования ОС.

/boot — файлы загрузчика и ядра

В /boot хранятся файлы, необходимые для загрузки операционной системы:

  • vmlinuz — сжатое ядро Linux;
  • initrd.img или initramfs — временная файловая система, используемая на ранних этапах загрузки;
  • конфигурационные файлы загрузчика (например, GRUB).

Этот каталог не должен изменяться вручную без понимания последствий.

/dev — файлы устройств

Каталог /dev представляет физические и виртуальные устройства в виде специальных файлов. Например:

  • /dev/sda1 — первый раздел на первом SATA-диске;
  • /dev/ttyS0 — последовательный порт;
  • /dev/null — «чёрная дыра», куда можно отправлять данные без сохранения.

Устройства создаются автоматически при подключении оборудования или при запуске системы.

/etc — конфигурационные файлы

Все системные настройки хранятся в /etc. Здесь находятся:

  • /etc/passwd — информация о пользователях;
  • /etc/group — группы пользователей;
  • /etc/fstab — таблица файловых систем, монтируемых при старте;
  • /etc/hosts — локальное сопоставление имён и IP-адресов;
  • конфигурации служб: Apache, SSH, systemd и других.

Этот каталог не содержит исполняемых файлов — только текстовые конфигурации.

/home — домашние каталоги пользователей

Каждый обычный пользователь получает свой подкаталог в /home. Например, пользователь james будет иметь каталог /home/james. В нём хранятся:

  • личные файлы и документы;
  • скрытые файлы настроек (начинаются с точки): .bashrc, .profile, .ssh;
  • ключи аутентификации: ~/.ssh/id_rsa, ~/.ssh/authorized_keys.

Домашний каталог изолирован от других пользователей по умолчанию благодаря системе прав доступа.

/lib и /lib64 — системные библиотеки

Каталоги /lib/lib64 на 64-битных системах) содержат разделяемые библиотеки, необходимые для запуска программ из /bin и /sbin. Примеры:

  • libc.so — стандартная библиотека языка C;
  • libm.so — математическая библиотека.

Без этих библиотек даже базовые команды не смогут работать.

/media и /mnt — точки монтирования

  • /media используется для автоматического монтирования съёмных носителей: флешек, CD/DVD, внешних дисков.
  • /mnt предназначен для временного ручного монтирования файловых систем (например, сетевых томов или разделов при обслуживании).

Разделение этих каталогов помогает поддерживать порядок: автоматические подключения — в /media, административные — в /mnt.

/opt — дополнительное программное обеспечение

Каталог /opt предназначен для установки сторонних приложений, особенно тех, которые поставляются в виде самодостаточных пакетов (часто коммерческие или проприетарные программы). Каждое приложение обычно создаёт здесь свой подкаталог: /opt/myapp.

/proc — виртуальная файловая система процессов

/proc — это псевдофайловая система, предоставляемая ядром. Она не существует на диске, а генерируется динамически в памяти. Через неё можно получить информацию о:

  • работающих процессах (подкаталоги вида /proc/1234);
  • аппаратных ресурсах: /proc/cpuinfo, /proc/meminfo, /proc/partitions;
  • параметрах ядра: /proc/sys/.

Запись в некоторые файлы /proc позволяет изменять поведение системы на лету.

/root — домашний каталог суперпользователя

Каталог /root — это домашняя директория пользователя root (администратора). Он отделён от /home по соображениям безопасности и доступности: даже если /home находится на отдельном разделе и не смонтирован, root сможет войти в систему.

/run — временные файлы времени выполнения

Современные дистрибутивы используют /run для хранения данных, актуальных только во время сессии:

  • PID-файлы служб;
  • сокеты;
  • информация о текущих пользователях (/run/utmp).

Содержимое этого каталога очищается при перезагрузке.

/sbin — системные исполняемые файлы

Каталог /sbin содержит команды, предназначенные в первую очередь для системного администратора:

  • init, reboot, shutdown;
  • fdisk, mkfs, iptables;
  • ifconfig, route (в некоторых дистрибутивах).

Эти утилиты часто требуют прав суперпользователя.

/srv — данные сервисов

Каталог /srv предназначен для хранения данных, предоставляемых системой другим машинам или пользователям. Например:

  • /srv/www — веб-сайты;
  • /srv/ftp — файлы FTP-сервера;
  • /srv/git — репозитории Git.

Стандарт FHS рекомендует использовать именно этот путь для сервисных данных.

/sys — информация об оборудовании и драйверах

Подобно /proc, каталог /sys — это виртуальная файловая система, экспонирующая структуру устройств, шин и драйверов. Она используется в первую очередь для взаимодействия с подсистемой управления питанием, горячей заменой устройств (hotplug) и настройкой параметров оборудования через простые текстовые файлы.

/tmp — временные файлы

Каталог /tmp предназначен для хранения временных файлов, создаваемых программами и пользователями. Содержимое может быть удалено при перезагрузке или очищено автоматически по истечении срока давности. Некоторые системы монтируют /tmp в оперативную память для повышения производительности.

/usr — пользовательские программы и данные

Несмотря на название (Unix System Resources), каталог /usr содержит не пользовательские файлы, а второстепенные, но важные компоненты системы:

  • /usr/bin — большинство пользовательских команд: python, perl, git, gcc;
  • /usr/lib — библиотеки для программ из /usr/bin;
  • /usr/share — архитектурно-независимые данные: документация, значки, локализация;
  • /usr/local — программное обеспечение, установленное локально администратором (вне пакетного менеджера).

В современных системах /usr часто объединяется с корнем, но логически остаётся отдельной частью.

/var — переменные данные

Каталог /var хранит файлы, которые постоянно изменяются в процессе работы системы:

  • /var/log — системные журналы: syslog, auth.log, kern.log;
  • /var/mail — почтовые ящики пользователей;
  • /var/spool — очереди задач: печать, cron, почта;
  • /var/www — корневая директория веб-сервера (в некоторых дистрибутивах);
  • /var/run — устаревшее место для runtime-данных (теперь чаще используется /run).

Этот каталог критически важен для диагностики и мониторинга системы.